package com.sutao.jvm.OOM;

/**
 * VM Args：-Xss128k
 * @author sutao
 * @create 2020-04-26 15:37
 *
 * 关于虚拟机栈和本地方法栈，在《Java虚拟机规范》中描述了两种异常：
 * 1）如果线程请求的栈深度大于虚拟机所允许的最大深度，将抛出StackOverflowError异常。
 * 2）如果虚拟机的栈内存允许动态扩展，当扩展栈容量无法申请到足够的内存时，将抛出OutOfMemoryError异常。
 *
 * 设置栈的内存大小：
 * 我们可以通过 -Xss 选项来设置线程的最大栈空间
 *
 */
public class JavaVMStackSOF {

    private int stackLength = 1;
    public void stackLeak() {
        stackLength++;
        stackLeak();
    }
    public static void main(String[] args) throws Throwable {
        JavaVMStackSOF oom = new JavaVMStackSOF();
        try {
            oom.stackLeak();
        } catch (Throwable e) {
            System.out.println("stack length:" + oom.stackLength);
            throw e;
        }
    }
}
